package main

import (
	"fmt"
	"net"
)

type Message struct {
	msg string
}

type Greeter struct {
	Message Message
}

type Event struct {
	Greeter Greeter
}

// 实例化 Message的构造函数
func NewMessage(msg string) Message {
	return Message{msg: msg}
}

func NewGreeter(m Message) Greeter {
	return Greeter{Message: m}
}

func NewEvent(g Greeter) Event {
	return Event{Greeter: g}
}

func (e Event) Start() {
	msg := e.Greeter.Greet()
	fmt.Println(msg)
}
func (g Greeter) Greet() Message {
	return g.Message
}

// 使用wire前
func main() {
	//message := NewMessage("hello world")
	//greeter := NewGreeter(message)
	//event := NewEvent(greeter)
	//event.Start()

	// 获取本地的网络地址
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return
	}
	fmt.Println(addrs)
	for _, address := range addrs {
		if ipNet, ok := address.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
			if ipNet.IP.To4() != nil {
				fmt.Println(ipNet.IP.String())
			}
		}
	}

}

//func main() {
//	//event := InitializeEvent("hello world")
//	//event.Start()
//	var (
//		err    error
//		level  = zap.NewAtomicLevel() // 原子级别日志，默认info
//		//logger *zap.Logger
//	)
//	// 解析日志级别
//	err = level.UnmarshalText([]byte("debug"))
//	if err != nil {
//		return
//	}
//	// 添加写入log文件
//	fw := zapcore.AddSync(&lumberjack.Logger{
//		Filename:   "test.log",
//		MaxSize:    100000,
//		MaxAge:     10,
//		MaxBackups: 100,
//	})
//	fmt.Println(fw)
//	// 输出文件锁
//	cw := zapcore.Lock(os.Stdout)
//
//	cores := make([]zapcore.Core, 0, 2)
//	je := zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
//	cores = append(cores, zapcore.NewCore(je, fw, level))
//
//	// stdout core 采用 ConsoleEncoder 在控制台显示
//	ce := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
//	cores = append(cores, zapcore.NewCore(ce, cw, level))
//	// 将Core 转换为 multiCore
//	tee := zapcore.NewTee(cores...)
//	fmt.Println(tee)
//
//}
